package com.nstar.components.preloader
{
    import flash.display.Sprite;   
    import flash.events.Event;   
    import flash.events.ProgressEvent;   
    import flash.events.TimerEvent;   
    import flash.text.TextField;   
    import flash.utils.Timer;   
    import mx.events.FlexEvent;   
    import mx.preloaders.DownloadProgressBar;   
       
    public class CustomPreloader extends DownloadProgressBar   
    {   
        //显示进度的文字   
        private var progressText:TextField;   
        //进度条   
        public var img:WelcomeScreen;   
        //logo页面   
        public var logo:WelcomeLogo;   
        private var _timer:Timer;   
           
        public function CustomPreloader()   
        {   
            super();   
            //加入logo   
            logo = new WelcomeLogo();   
            this.addChild(logo);   
            //加入进度条   
            img = new WelcomeScreen();   
            this.addChild(img);   
            //加入进度文字   
            /* progressText = new TextField();   
            progressText.x = img.x + img.width /2;   
            progressText.y = img.y + img.height + 10;   
            this.addChild(progressText);   */ 
            //进度条计时器初始化，我们实现进度条的原理就是不停的刷新进图条图片   
            //因为每次进度条的长度不同，所以就有进度条在走的效果   
            _timer = new Timer(1);   
            _timer.addEventListener(TimerEvent.TIMER, drawTimerHandler);   
            _timer.start();   
        }   
        /**  
         * override这个函数，来实现自己Preloader的设置，而不是用其默认的设置  
         */  
        override public function set preloader(value:Sprite):void  
        {   
            value.addEventListener(ProgressEvent.PROGRESS, progHandler);   
            value.addEventListener(FlexEvent.INIT_COMPLETE, initCompleteHandler);   
            //在这里设置预载界面居中   
            //如果在初始化函数中设置，会有stageWidth和最终界面大小不一致的错误，而导致不能居中   
            x = (stageWidth/2) - (img.width/2);   
            y = (stageHeight/2) - (img.height/2);   
        }   
           
        private function progHandler(e:ProgressEvent):void  
        {   
            //计算进度，并且设置文字进度和进度条的进度。   
            var prog:Number = e.bytesLoaded/e.bytesTotal*100;   
            //progressText.text = "已下载 " + String(int(prog)) + "%";   
            if(img)   
            {   
                img.progress = prog;   
            }   
        }   
           
        private function compHandler(e:Event):void  
        {   
               
        }   
           
        private function initCompleteHandler(e:FlexEvent):void  
        {   
            //如果载入完毕，则停止刷新   
            img.ready = true;   
            _timer.stop();   
            //测试专用。下载完毕后，不马上跳到程序的默认界面。而是停顿指定秒数后再跳入。   
             var timer:Timer = new Timer(100, 1);   
            timer.addEventListener(TimerEvent.TIMER, dispatchComplete);   
            timer.start();    
        }   
           
        private function initProgHandler(e:FlexEvent):void  
        {   
               
        }   
        /**  
         * 一定要分发这个事件，来通知程序已经完全下载，可以进入程序的默认界面了  
         */  
        private function dispatchComplete(event:TimerEvent):void  
        {   
            this.dispatchEvent(new Event(Event.COMPLETE));   
        }   
        /**  
        * 每个时钟周期都刷新进度条图片  
        */  
        private function drawTimerHandler(event:TimerEvent):void  
        {   
            img.refresh();   
        }   
  
    } 
}